package com.lengxf.leetcode.a;

import java.util.Arrays;

public class Leetcode_3 {

    public static void main(String[] args) {
        String s = "asdasdfhi";
        int i = lengthOfLongestSubstring(s);
        System.out.println(i);
    }

    /**
     * 无重复字符的最长子串
     * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
     * 链接: <a href="https://leetcode.cn/problems/longest-substring-without-repeating-characters/">...</a>
     */
    public static int lengthOfLongestSubstring(String s) {
        // 记录字符上一次出现的位置
        int[] last = new int[128];
        Arrays.fill(last, -1);
        char[] chars = s.toCharArray();
        int length = chars.length;
        //最大长度
        int result = 0;
        //窗口的位置
        int cursor = 0;
        for (int i = 0; i < length; i++) {
            char c = s.charAt(i);
            //实现滑动窗口的作用
            cursor = Math.max(cursor, last[c] + 1);
            result = Math.max(result, i - cursor + 1);
            last[c] = i;
        }
        return result;
    }

}
